home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / prgtools / programm.ing / libscsi1.zoo / LibScsi-0.01 / rw_rand.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-03-14  |  1.2 KB  |  50 lines

  1. /*
  2.  * rw_rand.c - Copyright Steve Woodford, August 1993.
  3.  *
  4.  * Read/Write a random access device such as a hard disk. Results are
  5.  * undefined if used for a sequential device. NO SANITY CHECKS ARE
  6.  * PERFORMED HERE TO ENSURE THE CORRECT DEVICE TYPE!!!
  7.  */
  8.  
  9. #include <sys/types.h>
  10. #include <sys/scsi.h>
  11. #include "libscsi.h"
  12.  
  13.  
  14. PUBLIC  short
  15. Scsi_RdWr_Rand(Sc_RW rw, u_char id, void *buf,
  16.                u_char dma_blks, u_char dev_blks, u_long start)
  17. {
  18.     Scsi_Cmd    sc;
  19.  
  20.     if ( id & 0xc0 )
  21.         return(-1);
  22.  
  23.     if ( rw == SCSI_READ )
  24.     {
  25.         (void) _Scsi_Timeout( T_Read(id) );
  26.         sc.sc_command = CMD(id, SZ_CMD_READ);
  27.     }
  28.     else
  29.     if ( rw == SCSI_WRITE )
  30.     {
  31.         (void) _Scsi_Timeout( T_Write(id) );
  32.         sc.sc_command = CMD(id, SZ_CMD_WRITE);
  33.     }
  34.     else
  35.         return(-1);
  36.  
  37.     sc.sc_link = 0;                     /* Link is always zero      */
  38.     sc.sc_z[3] = dev_blks;              /* Load Transfer Length     */
  39.     sc.sc_z[2] = start & 0xff;          /* Load Start Block         */
  40.     start    >>= 8;
  41.     sc.sc_z[1] = start & 0xff;
  42.     start    >>= 8;
  43.     sc.sc_z[0] = LUN(id, (start & 0x3f));
  44.  
  45.     /*
  46.      * Issue the READ/WRITE command...
  47.      */
  48.     return( _Scsi_Command( rw, &sc, buf, dma_blks ) );
  49. }
  50.